%%
clear
clc
close all

tic
%Abre workers para paralelizar
if matlabpool('size') ==0 % 4 workers
    matlabpool
end
%% Carga tablas output sistemas individuales
filtrar=false;
if filtrar
        FiltroMCIM();
end
%Elapsed time is 2.862210 second CPU , 0.982 sec Paralel
%reejecuto
    %% Gestion ficheros para datos filtrados
fprintf('Gestion Ficheros -')
[ files ,CantidadAutomatas,fecha] = GestionTrades();%No lo suficiente grande para matlab en GPU
fprintf('encontrados %i archivos \n',CantidadAutomatas)
fprintf('Deberia salir 282 para que coincida con los resutlados de la combinacione anterior \n')

%% Carga tablas output sistemas individuales
    
fprintf('Prepara tabla datos\n')
fechaPrimera=734139;%1 enero 2010

tabladatos=zeros((datenum(today)-fechaPrimera+1),CantidadAutomatas+1);
parfor fila=1:CantidadAutomatas


        input_files=files(fila,:);
        tabla = importdata(strcat('trades/',input_files(1,:)));
        %transforma formato fecha
        data=tabla.data;
        longituddata=length(data(:,12));
        data(1:longituddata,12)=datenum(num2str(data(1:longituddata,12)),'yyyymmdd');
        % Rellena fechas

        array=fechaPrimera:datenum(today);
        TablaRellena = zeros(length(array),2);
        TablaRellena(:,2)=array';
        for fila2=1:length(array)
            for filaorign=1:length(data(:,12))
                if TablaRellena(fila2,2)==data(filaorign,12)%se copian los dias de operacion
                    TablaRellena(fila2)=data(filaorign,11);
                end
            end
        end
        output_balance{fila}=num2cell(nonZeroBalance(TablaRellena));%metodo que rellena los ceros con lo anterior

        tabladatos(:,fila)=cell2mat(output_balance{fila}(:,1));
        %eval(['data_' num2str(fila) ' = output_balance']);%quitar que imprima por pantalla

end
%% 1) Carga info combianciones ordenadas por ratio mcim
load('Combinaciones5Data.mat')%carga la tabla de combinaciones
%tablacombinaciones_comb=tablacombinaciones_comb(1:1000,1:5);%cogemos los 1e4 primeras combinaciones

%% 2)Ordeno ratios de sistemas individuales
% Resultados un sistema -  operaciones FINAL

fprintf('Ratios de sist.Individuales \n');
tablaResultados=zeros(CantidadAutomatas,2);%tabla para guardar los ratios
parfor vector=1:CantidadAutomatas
    sistema(vector)=vector;
    ratio(vector)= RatioMCIM( tabladatos(:,vector) );
end
tablaResultados(:,1)=sistema(:);
tablaResultados(:,2)=ratio(:);
entradauno=sortrows(tablaResultados,2);%0-226
entradauno=flipud(entradauno);
tablacombinaciones_ind=entradauno(:,1);%solo me interesa la prmera columna
clear tablaResultados
clear entradauno
tabladatos_ind=tabladatos;
clear tabladatos
%% 3)Algoritmo Genetico   
% input filaentradauno , filatablacombinaciones_comb    
fprintf('Algoritmo Genetico')
algoritmoGenetico3_comb8;%[x,fval,exitflag,output,population,score]



%% ----------------------------------------IGUAL que otros
x=round(x);

sistema1=tablacombinaciones_ind(x(1,2),1);%traduce
sistema2=tablacombinaciones_comb(x(1,1),1);
sistema3=tablacombinaciones_comb(x(1,1),2);
sistema4=tablacombinaciones_comb(x(1,1),3);
sistema5=tablacombinaciones_comb(x(1,1),4);
sistema6=tablacombinaciones_comb(x(1,1),5);
sistema7=tablacombinaciones_comb(x(1,3),1);
sistema8=tablacombinaciones_comb(x(1,4),1);

SistemasGanadores=[sistema1 , sistema2 , sistema3 , sistema4, sistema5 , sistema6,sistema7,sistema8];
close all
pintaSistemas(tabladatos_ind,SistemasGanadores);
%---------------------------------------------------------------------------------------------------------------------
%% Selecciona los mejores 1000 individuos
close all
population(:,1)=tablacombinaciones_ind(x(:,2),1);
population(:,2)=tablacombinaciones_comb(x(:,1),1);
population(:,3)=tablacombinaciones_comb(x(:,1),2);
population(:,4)=tablacombinaciones_comb(x(:,1),3);
population(:,5)=tablacombinaciones_comb(x(:,1),4);
population(:,6)=tablacombinaciones_comb(x(:,1),5);
population(:,7)=tablacombinaciones_ind(x(:,3),1);
population(:,8)=tablacombinaciones_ind(x(:,4),1);

TablaSistemasFinal = [SistemasGanadores;unique(population,'rows','stable')];
filas=min(1000,length(TablaSistemasFinal(:,1)));
TablaSistemasFinal=TablaSistemasFinal(1:filas,:);%Slecciona
tabladatos=tabladatos_ind;
%% Filtrado
sistemassalida=8;
filtradoGenetico;
%% Graficas 6M_12M
graficas6M12M;
%% Prepara archivo salida

maximoResultadosseleccion=4;
resultado = num2cell(tablacombinaciones(1:maximoResultadosseleccion,:));

for fila=1:maximoResultadosseleccion
    for columna=1:8
        if tablacombinaciones(fila,columna) ~=0
        numero = tablacombinaciones(fila,columna);
        resultado(fila,columna)=cellstr(files(numero,:));
        end
    end
    resultado(fila,15)={datestr(tablacombinaciones(fila,15),'yyyymmdd')};
    resultado(fila,16)={datestr(tablacombinaciones(fila,16),'yyyymmdd')};
end

% outputMejor=pinta1Sistema(tabladatos,tablacombinaciones(1,tablacombinaciones(1,1:10)~=0));
%  plot(outputMejor);
%  title Combinaciones
% saveas(gcf, 'MejorCombinacion7GeneticoComb-Determinacion', 'jpeg');
cell2csv('MejorCombinacion8GeneticoComb.csv', resultado,';',1997,',');%(fileName, cellArray, separator, excelYear, decimal)

    